﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;

namespace Invent
{
    class Settings
    {
        private string version;
        private string title;
        private string filename;
        private string server;
        private string port;
        private string database;

        public Settings(string FileName)
        {
            filename = FileName;
        }
        public Settings()
        {
            filename = "settings.xml";
        }

        public string Server
        {
            get { return server; }
            set { server = value; }
        }
        public string Port
        {
            get { return port; }
            set { port = value; }
        }
        public string Database
        {
            get { return database; }
            set { database = value; }
        }
        public string Version
        {
            get { return version; }
            set { version = value; }
        }
        public string Title
        {
            get { return title; }
            set { title = value; }
        }


        public void SaveToFile()
        {
            XmlWriterSettings settings = new XmlWriterSettings();

            // включаем отступ для элементов XML документа
            // (позволяет наглядно изобразить иерархию XML документа)
            settings.Indent = true;
            settings.IndentChars = "    "; // задаем отступ, здесь у меня 4 пробела

            // задаем переход на новую строку
            settings.NewLineChars = "\n";

            // Нужно ли опустить строку декларации формата XML документа
            // речь идет о строке вида "<?xml version="1.0" encoding="utf-8"?>"
            settings.OmitXmlDeclaration = true;

            // FileName - имя файла, куда будет сохранен XML-документ
            // settings - настройки форматирования (и не только) вывода
            // (рассмотрен выше)
            using (XmlWriter output = XmlWriter.Create(filename, settings))
            {
                // Создали открывающийся тег
                output.WriteStartElement("Settings");
                // аттрибуты стартового тега
                output.WriteAttributeString("version",version);
                output.WriteAttributeString("title", title);
                // элементы конфигурации
                output.WriteElementString("Server", server);
                output.WriteElementString("Port", port);
                output.WriteElementString("Database", database);

                // Закрываем стартовый тег
                output.WriteEndElement();
                
                // Сбрасываем буфферизированные данные
                output.Flush();
                // Закрываем фаил, с которым связан output
                output.Close();
            }
    }

        public void ReadFromFile()
        { 
            // Создаем экземпляр класса
XmlDocument xmlDoc = new XmlDocument();
 
// Загружаем XML-документ из файла
xmlDoc.Load(filename);
 
// Загружаем аттрибуты корневого элемента
// 
foreach (XmlAttribute atr in xmlDoc.DocumentElement.Attributes)
{
    switch (atr.Name)
    {
        case "version":
            version = atr.InnerText;
            break;
        case "title":
            title = atr.InnerText;
            break;
        default:
            break;
    }
}
// Получаем всех детей корневого элемента
// xmlDoc.DocumentElement - корневой элемент
foreach (XmlNode table in xmlDoc.DocumentElement.ChildNodes)
{
    switch (table.Name)
    {
        case "Server":
            server = table.InnerText;
            break;
        case "Port":
            port = table.InnerText;
            break;
        case "Database":
            database = table.InnerText;
            break;
        default:
           
                break;
    }
    // перебираем все атрибуты элемента
    foreach (XmlAttribute attr in table.Attributes)
    {
        switch (attr.Name)
        {
            case "version":
                version = attr.InnerText;
                break;
            case "title":
                title = attr.InnerText;
                break;
            default:
                break;
        }
        // attr.Name - имя текущего атрибута
        // attr.Value - значение текущего атрибута
        string s = attr.Name + ":" + attr.Value;
    }
 
    // перебираем всех детей текущего узла
    foreach (XmlNode ch in table.ChildNodes)
    {
        string s1 = ch.Name + " " + ch.Value;
    }
    // Получаем текст хранящийся в текущем узле
    //MessageBox.Show(table.InnerText);
}
        }
    }
}
